#pragma once

#include <osg/Group>
#include <osg/Node>
#include <QMap>

/**
 * @brief 三维场景管理者，负责加载、卸载、隐藏、显示等操作
 */

class xSceneManger
{
private:
     xSceneManger(osg::Group* root);
     virtual ~xSceneManger();

public:
    /**
     * @brief loadScene 加载场景
     * @param fileName 加载文件路径和文件名
     */
    void loadScene(std::string fileName);

    /**
     * @brief unloadScene 关闭场景
     * @param fileName 卸载文件路径和文件名
     */
    void unloadScene(std::string fileName);

    /**
     * @brief unloadAll 关闭所有场景
     */
    void unloadAll();

    /**
     * @brief getInstance 获取场景管理器,单例
     * @param root  场景根节点
     */
    static xSceneManger* getInstance(osg::Group *root);

    /**
     * @brief checkScene check场景, 改变隐藏显示状态
     * @param fileName  树列表中的文件名
     */
    void checkScene(std::string fileName);

protected:
    typedef QMap<std::string, osg::Node*> NodeAssocContainer;
    typedef NodeAssocContainer::iterator NodeAssocContainerIter;

private:
    /**
     * @brief ptrRoot 场景根节点
     */
    osg::ref_ptr<osg::Group> ptrRoot;

    /**
     * @brief m_nodeContainer 容器，保存树列表中的文件名和对应osg结点
     */
    NodeAssocContainer m_nodeContainer;

};


